import wx  # 导入wxPython
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
import datetime
import random
import time


class PdfApp(wx.Frame):

    def __init__(self, parent, id):  # 初始化方法

        # parent  是否是顶级窗口
        # id  关于新窗口的wxPython ID号。通常设为-1，让wxPython自动生成一个新的ID
        # title  窗口标题
        # pos  一个wx.Point对象，它指定这个新窗口的左上角在屏幕中的位置。在图形用户界面程序中，通常是(0,0)是显示器的左上角。这个默认值(-1,-1)将让系统决定窗口的位置
        # size  一个wx.Python对象，他指定这个窗口的初始尺寸，这个默认值(-1,-1)将让系统决定窗口的初始尺寸
        # style  指定窗口的类型的常量。可以使用或运算来组合他们
        # name   框架内在的名字。可以使用它来寻找这个窗口
        # frame = wx.Frame(parent=None, id=-1, title="PDF截取工具", pos=wx.DefaultPosition, size=wx.DefaultSize,
        #                  style=wx.DEFAULT_DIALOG_STYLE, name="frame")
        wx.Frame.__init__(self, parent, id, title="Pdf之截取指定页", size=(500, 300))
        # 窗口居中
        self.Center()
        panel = wx.Panel(self)  # 创建画板

        # 创建标题，并设置字体
        # 创建文本和输入框
        # self.title = wx.StaticText(panel, label="请填写文件路径和指定页码", pos=(180, 20))

        self.label_path = wx.StaticText(panel, label="请选择:", pos=(45, 10))
        self.bt_select = wx.Button(panel, label='请选择文件路径', pos=(100, 10))  # 创建“取消”按钮
        self.bt_select.Bind(wx.EVT_BUTTON, self.OnButton)

        self.label_path = wx.StaticText(panel, label="文件路径:", pos=(45, 50))
        self.text_path = wx.TextCtrl(panel, pos=(100, 50), size=(350, 25), style=wx.TE_LEFT)

        self.label_page_statrt = wx.StaticText(panel, pos=(45, 90), label="起始页码:")
        self.text_page_statrt = wx.TextCtrl(panel, pos=(100, 90), size=(350, 25), style=wx.TE_LEFT, value='0')

        self.label_page_end = wx.StaticText(panel, pos=(45, 130), label="结束页码:")
        self.text_page_end = wx.TextCtrl(panel, pos=(100, 130), size=(350, 25), style=wx.TE_LEFT, value='1')

        self.bt_confirm = wx.Button(panel, label='确定', pos=(150, 180))  # 创建“确定”按钮
        self.bt_confirm.Bind(wx.EVT_BUTTON, self.OnclickSubmit)

        self.bt_cancel = wx.Button(panel, label='取消', pos=(240, 180))  # 创建“取消”按钮
        self.bt_cancel.Bind(wx.EVT_BUTTON, self.OnclickCancel)

        self.version = wx.StaticText(panel, label="版权 © 2020  Designed by senlay@aliyun.com", pos=(120, 240))

    def OnButton(self, event):
        dlg = wx.DirDialog(self, "选择文件夹", style=wx.DD_DEFAULT_STYLE)
        if dlg.ShowModal() == wx.ID_OK:
            filePath = dlg.GetPath()
            self.text_path.SetValue(filePath)
            print(filePath)  # 文件夹路径
        dlg.Destroy()

    # 进度条
    def OnStart(self, e):
        while True:
            time.sleep(1);
            self.count = self.count + 1
            self.gauge.SetValue(self.count)

            if self.count >= 20:
                print("end")
                return

    def OnclickSubmit(self, event):
        """ 点击确定按钮，执行方法 """
        path = self.text_path.GetValue()  # 获取输入的路径
        print(path)  # 文件夹路径
        start = self.text_page_statrt.GetValue()  # 获取输入的开始页码
        end = self.text_page_end.GetValue()  # 获取输入的结束页码
        if path == "" or path == " ":
            message = '文件路径不能为空，请输入您需要转换的文件根目录'
        # elif start == ' ' and start == ' ':
        #     message = ' '
        # elif end == ' ' and end == ' ':
        #     message = ' '
        else:
            message = '请到' + path + '\\out,目录下寻找转换后的PDF,别忘记了核对下哦！'
        self.transPdf(path, start, end)
        wx.MessageBox(message)  # 弹出提示框

    def OnclickCancel(self, event):  # 没有event点击取消会报错
        """ 点击取消按钮，执行方法 """
        self.text_path.SetValue("")  # 清空输入的路径
        # self
        # print(filePath)

    def transPdf(self, filePath, start_page, end_page):
        out = filePath + "\\out\\";
        self.createOutPath(out)
        # now = datetime.datetime.now()
        # dt_ms = now.strftime("%Y%m%d%H%M%S")
        for root, dirs, files in os.walk(filePath):
            for pathName in files:
                allPath = filePath + "\\" + pathName;
                pdf_file = PdfFileReader(open(allPath, "rb"))
                pdf_pages_len = pdf_file.getNumPages()
                output = PdfFileWriter()
                # 保存input.pdf中的1-1页到output.pdf
                startIndex = int(start_page)
                endIndex = int(end_page)
                for i in range(startIndex, endIndex):
                    output.addPage(pdf_file.getPage(i))
                outputStream = open(out + pathName, "wb")
                output.write(outputStream)

    def createOutPath(self, outPath):
        # 去除首位空格
        outPath = outPath.strip()
        # 去除尾部 \ 符号
        outPath = outPath.rstrip("\\")

        # 判断路径是否存在
        # 存在     True
        # 不存在   False
        isExists = os.path.exists(outPath)

        # 判断结果
        if not isExists:
            # 如果不存在则创建目录
            # 创建目录操作函数
            os.makedirs(outPath)

            print(outPath + ' 创建成功')
            return outPath
        else:
            # 如果目录存在则不创建，并提示目录已存在
            print(outPath + ' 目录已存在')
            return outPath


if __name__ == '__main__':
    app = wx.App()  # 实例化App类
    frame = PdfApp(parent=None, id=-1)
    frame.Show()
    app.MainLoop()  # 调用App类的MainLoop()主循环方法
